#include <stdio.h>
#include <algorithm>
using namespace std;
#define N 100010
#define K (1<<17)
char s[N];
int a[N][27], B[4*N], *b, *c, m[N], h, d[2*K], p, r[N], l[N];
bool cmp(int i, int j) { return b[i]<b[j] || (b[i]==b[j] && b[i+h]<b[j+h]); }
void sfa(char *s, int n)
{
	int i, j;
	b=B; c=B+2*n;
	for(i=0; i<n; b[i]=s[i], m[i]=i, i++);
	for(j=0, h=1; j<n; swap(b, c), h*=2)
		for(sort(m, m+n, cmp), j=1, i=0; i<n; c[m[i]]=j, j+=cmp(m[i], m[i+1]), i++);
	for(i=0; i<n; r[m[i]]=i, i++);
}
void ins(int i, int v)
{
	for(i+=p, d[i]=v, i>>=1; i>0; d[i]=min(d[2*i], d[2*i+1]), i>>=1);
}
int get(int i, int j)
{
	int r=N;
	for(i+=p, j+=p; i<=j; i=(i+1)>>1, j=(j-1)>>1)
	{
		if((i&1) && d[i]<r) r=d[i];
		if((~j&1) && d[j]<r) r=d[j];
	}
	return r;
}
int bs(int l, int r, int h)
{
	int c;
	char t;
	for(t=s[m[l]+h]; l<r; )
	{
		c=(l+r)/2;
		if(s[m[c]+h]==t) l=c+1;
		else r=c;
	}
	return r;
}
int main()
{
	int i, j, k, n, f;
	char t;
	for(scanf("%s", s), n=0; s[n]; s[n]-='a', s[n]++, n++);
	for(i=0; i<n; a[i][s[i]]=i+1, i++);
	sfa(s, n);
	for(p=1; p<n; p*=2);
	for(i=0; i<n; d[i+p]=m[i], b[i]=0, c[i]=0, i++);
	for(; i<p; d[i+p]=N, i++);
	for(i=p-1; i>0; d[i]=min(d[2*i], d[2*i+1]), i--);
	ins(r[0], N);
	for(b[0]=0, c[0]=n, l[0]=0, i=0; i<n; i++)
		for(; b[i]<c[i]; b[i]=j)
		{
			j=bs(b[i], c[i], l[i]);
			t=s[m[b[i]]+l[i]];
			if(!t) f=N;
			else if(a[i][t]) f=i+1;
			else
			{ 
				f=get(b[i], j-1);
				if(f<N) f+=l[i]+1;
			}
			if(f<=n)
			{
				a[i][t]=f;
				ins(r[f-1-l[i]], N);
				if(!c[f]) { b[f]=b[i]; c[f]=j; l[f]=l[i]+1; }
			}
		}
	for(k=0, i=0; i<n; i++)
		for(j=1; j<=26; k+=a[i][j]>0, j++);
	for(printf("%d %d\n", n+1, k), i=0; i<n; i++)
		for(j=1; j<=26; j++)
			if(a[i][j]) printf("%d %d %c\n", i+1, a[i][j]+1, 'a'+j-1);
	return 0;
}